
///////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2009, Perry L Miller IV
//  All rights reserved.
//  BSD License: http://www.opensource.org/licenses/bsd-license.html
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//
//  The property editor class.
//
///////////////////////////////////////////////////////////////////////////////

#include "Tools/PropertyEditor/Editor.h"
#include "Tools/PropertyEditor/EditorWindow.h"

#include "Usul/Functions/NoThrow.h"

#include "boost/bind.hpp"

using namespace Tools::PropertyEditor;


///////////////////////////////////////////////////////////////////////////////
//
//  Constructor.
//
///////////////////////////////////////////////////////////////////////////////

Editor::Editor() : BaseClass(),
  _threadCheck(),
  _window ( new EditorWindow )
{
}


///////////////////////////////////////////////////////////////////////////////
//
//  Destructor.
//
///////////////////////////////////////////////////////////////////////////////

Editor::~Editor()
{
  Usul::Functions::noThrow ( boost::bind ( &Editor::_destroy, this ), "1883277348" );
}


///////////////////////////////////////////////////////////////////////////////
//
//  Destroy this instance.
//
///////////////////////////////////////////////////////////////////////////////

void Editor::_destroy()
{
  _threadCheck.throwIfDifferentThread();
  this->clear();
  delete _window; _window = 0x0;
}


///////////////////////////////////////////////////////////////////////////////
//
//  Clear this instance.
//
///////////////////////////////////////////////////////////////////////////////

void Editor::clear()
{
  _threadCheck.throwIfDifferentThread();

  if ( 0x0 != _window )
  {
    _window->clear();
  }
}


///////////////////////////////////////////////////////////////////////////////
//
//  Add the property.
//
///////////////////////////////////////////////////////////////////////////////

void Editor::propertyAdd ( const std::string &name, 
                           const boost::any &value,
                           IUnknown::RefPtr callback )
{
  _threadCheck.throwIfDifferentThread();

  if ( 0x0 != _window )
  {
    //_window->addObject ( 
  }
}
